<?php


namespace App\backend\models;

use DateTimeInterface;
use App\common\models\BaseModel;
use Illuminate\Http\Request;

class MemberModel extends BaseModel
{

//    const table = 'members';
    //设置表名
    const TABLE_NAME = "members";
    protected $table = self::TABLE_NAME;

    protected $hidden = ['password'];

    /**
     * 会员－订单关系
     */
    public function hasOneOrder()
    {
        return $this->hasOne('App\frontend\models\orderModel', 'uid', 'uid');
    }

    /**
     * 新版会员中心搜索
     */
    public static function getMemberPageList($params)
    {
        //关键字（手机号、微信昵称、姓名）
        $keyword = isset($params['keyword'])?trim($params['keyword']):'';
        $result = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
            'points','balance','pocket_money'])
            ->leftJoin('member_del_log', 'members.uid', '=', 'member_del_log.member_id');

//        if (!empty($parame['search']['mid'])) {
//            $result = $result->where('uid', $parame['search']['mid']);
//        }

        //注册时间（开始时间、结束时间）
        $start_time = isset($params['start_time'])?strtotime($params['start_time']):'';
        $end_time = isset($params['end_time'])?strtotime($params['end_time']):'';
        if (!empty($start_time) && !empty($end_time)) {
            $result = $result->whereBetween('createtime', [$start_time, $end_time]);
        }

        if (!empty($keyword)) {
            $result->where(function ($query) use ($params) {
                $query->where(
                    [
                        ['mobile', 'like', '%' . $params['keyword'] . '%', 'or'],
                        ['nickname', 'like', '%' . $params['keyword'] . '%', 'or'],
                        ['realname', 'like', '%' . $params['keyword'] . '%', 'or']
                    ]
                );
            });
        }

//        if ($parame['search']['custom_value']) {
//            $result->where('members.custom_value', 'like', '%' . $parame['search']['custom_value'] . '%');
//        }

//        if (!empty($parame['search']['groupid'])) {
//            $result->where('members.group_id', $parame['search']['groupid']);
//        }

//        if (is_numeric($parame['search']['level'])) {
//            $result->where('members.level_id', $parame['search']['level']);
//        }

//        if ($parame['search']['isblack'] != '') {
//            $result->where('members.is_black', $parame['search']['isblack']);
//        }

//        if ($parame['search']['isagent'] != '') {
//            $result->where('members.is_agent', $parame['search']['isagent']);
//        }

//        if (isset($parame['search']['parent_id'])) {
//            $result->where('members.parent_id', (int)$parame['search']['parent_id']);
//        }
        //余额区间搜索
//        if ($parame['search']['min_credit2']) {
//            $result = $result->where($credit, '>', $parame['search']['min_credit2']);
//        }
//        if ($parame['search']['max_credit2']) {
//            $result = $result->where($credit, '<', $parame['search']['max_credit2']);
//        }

//        if ($parame['search']['followed'] != '') {
//            $result = $result->whereHas('hasOneFans', function ($q2) use ($parame) {
//                $q2->where('follow', $parame['search']['followed']);
//            });
//        }


        $result = $result->with([
//            'yzMember' => function ($query) {
//            return $query->select(['member_id', 'parent_id', 'inviter', 'is_agent', 'group_id', 'level_id', 'is_black', 'withdraw_mobile', 'is_old'])
//                ->with(['group' => function ($query1) {
//                    return $query1->select(['id', 'group_name'])->uniacid();
//                }, 'level' => function ($query2) {
//                    return $query2->select(['id', 'level_name'])->uniacid();
//                }, 'agent' => function ($query3) {
//                    return $query3->select(['uid', 'avatar', 'nickname', 'mobile'])->uniacid();
//                }]);
//            },

//            'hasOneFans' => function ($query4) {
//                return $query4->select(['uid', 'follow as followed', 'openid'])->uniacid();
//            },
//            'hasOneOrder' => function ($query5) {
//                return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
//                    ->uniacid()
//                    ->where('status', Order::COMPLETE)
//                    ->groupBy('uid');
//            },
//            'hasOneMiniApp' => function ($query6) {
//                return $query6->select(['mini_app_id', 'member_id', 'openid'])->uniacid();
//            },
//            'hasOneUnique' => function ($query7) {
//                return $query7->select(['unique_id', 'member_id', 'unionid'])->uniacid();
//            },
//            'hasOneWechat' => function ($query8) {
//                return $query8->select(['wechat_id', 'member_id'])->uniacid();
//            },
//            'hasOneDouyin' => function ($query9) {
//                return $query9->select(['douyin_id', 'member_id'])->uniacid();
//            },
//            'model.agent',

        ]);

//        if (app('plugins')->isEnabled('aggregation-cps')) {
//            $result->with([
//                'hasOneAggregationCpsMember' => function ($query) {
//                    return $query->select(['id', 'member_id'])->uniacid();
//                }
//            ]);
//        }
//        //判断支付宝插件
//        if (file_exists(base_path('plugins/alipay-onekey-login'))) {
//            $result->with('hasOneAlipay');
//        }
//
//        //判断会员标签插件
//        $set = array_pluck(Setting::getAllByGroup('member-tags')->toArray(), 'value', 'key');
//        if (app('plugins')->isEnabled('member-tags') && $set['is_open']) {
//            if ($parame['tag_id']) {
//                $result->whereHas('hasManyTag', function ($query) use ($parame) {
//                    $query->where('tag_id', $parame['tag_id']);
//                });
//            }
//            if ($parame['search']['label_id']) {
//                $result->whereHas('hasManyTag', function ($query) use ($parame) {
//                    $query->where('tag_id', $parame['search']['label_id']);
//                });
//            }
//            $result->with(['hasManyTag' => function ($query) {
//                $query->with('tag');
//            }]);
//        }
//
//        if (app('plugins')->isEnabled('wechat-customers') && app('plugins')->isEnabled('work-wechat-platform')) {
//            $result->with('hasOneCustomers');
//        }

        $result->whereNull('member_del_log.member_id')
            ->where('members.deleted_at','=',0)
            ->orderBy('members.uid', 'desc');

        return $result;
    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function rules()
    {
        return [
            'mobile' => 'required|regex:/^1[3456789]{1}\d{9}$/', // 手机号码
            'email' => 'regex:/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i', // 邮箱
            'password' => 'required|string|max:32', // 密码
            'level_id' => 'integer', // 会员等级
            'group_id' => 'integer', // 会员组
            'type' => 'string', // 会员类型
            'points' => 'integer', // 积分
            'balance' => 'numeric', // 余额
            'avatar'  => 'string|max:255', // 头像
            'nickname'  => 'string|max:20', // 昵称
            'realname'  => 'string|max:10', // 真实姓名
            'birthday'  => 'string', // 备注
            'bio'  => 'string', // 出生日期
        ];
    }

    /**
     * 字段验证返回错误信息
     *
     * @return array
     */
    static public function message()
    {
        return [
            'mobile.required' => '手机号码必填', // 手机号码
            'mobile.regex' => '手机号码格式有误', // 手机号码
            'email.regex' => '邮箱格式有误', // 邮箱
            'password.required' => '密码必填', // 密码
            'password.string' => '密码必须字符', // 密码
            'password.max' => '密码最大32位', // 密码
            'level_id.integer' => '会员等级必须整数', // 会员等级
            'group_id.integer' => '会员组必须整数', // 会员组
            'type.string' => '会员类型必须字符', // 会员类型
            'points.integer' => '积分必须整数', // 积分
            'balance.numeric' => '余额必须数字', // 余额
            'avatar.string'  => '头像必须字符', // 头像
            'avatar.max'  => '头像最大255位', // 头像
            'nickname.string'  => '昵称必须字符', // 昵称
            'nickname.max'  => '昵称最大20位', // 昵称
            'realname.string'  => '真实姓名必须字符', // 真实姓名
            'realname.max'  => '真实姓名最大10位', // 真实姓名
            'birthday.string'  => '出生日期必须字符', // 出生日期
            'bio.string'  => '备注必须字符', // 备注
        ];
    }

    /**
     * 格式化时间
     * @param DateTimeInterface $date
     * @return mixed
     */
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

}
